home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Windows Expert
/
Windows Expert.iso
/
windownt
/
ibmsyn.zip
/
SEMFISDA.H
< prev
next >
Wrap
Text File
|
1992-08-05
|
11KB
|
228 lines
/* semfisda.h */
/* Device Driver for IBM SDLC adapter: Global data */
/*****************************************************************************/
/* Trace data */
/*****************************************************************************/
#ifdef IBMSYNC_TRACE
UCHAR TrcBuffer [TRC_BUFSIZE];
UCHAR *TrcPtr = TrcBuffer;
#endif
/*****************************************************************************/
/* Bus Type (Eisa, Isa or MicroChannel. */
/*****************************************************************************/
INTERFACE_TYPE InterfaceType;
/*****************************************************************************/
/* 8273 data */
/*****************************************************************************/
/* Commands, statically allocated, for copying into target device extension */
/* */
/* Note that only the first two bytes are required - opcode and length. */
/* Other bytes must be written driver before command is used */
/* */
/* Note also that the command may be overwritten if appropriate: e.g. */
/* receive and DataTransferMode commands. */
/*****************************************************************************/
UCHAR LastWaitUntilStatus;
UCHAR ProtoCmdStringReadPortA[] = { 0x22, 0 };
UCHAR ProtoCmdStringResetOpMode[] = { 0x51, 1 };
UCHAR ProtoCmdStringResetSerialIOMode[]= { 0x60, 1 };
UCHAR ProtoCmdStringSetOpMode[] = { 0x91, 1 };
UCHAR ProtoCmdStringSetSerialIOMode[] = { 0xa0, 1 };
UCHAR ProtoCmdStringDataTransferMode[] = { 0x97, 1 };
UCHAR ProtoCmdStringResetPortB[] = { 0x63, 1 };
UCHAR ProtoCmdStringSetPortB[] = { 0xa3, 1 };
UCHAR ProtoCmdStringReceive [] = { 0xc0, 2 };
UCHAR ProtoCmdStringTransmit[] = { 0xc8, 4 };
UCHAR ProtoCmdStringAbortTransmit[] = { 0xcc, 0 };
UCHAR ProtoCmdStringDisableReceiver[] = { 0xc5, 0 };
/*****************************************************************************/
/* FSM data */
/*****************************************************************************/
char *RxFSMStateNames[] = {"RsId", "RsGo", "RsIH", "RsRH"};
char *RxFSMInputNames[] = {"RiGo", "RiSo", "RiHo", "RiRl", "RiGr", "RiEr"};
char *TxFSMStateNames[] = {"TsId", "TsAc", "TsTx", "TsAb", "TsCl"};
char *TxFSMInputNames[] = {"TiGo", "TiEo", "TiSo", "TiAb", "TiEr"};
/*****************************************************************************/
/* This is the declaration of the Receiver FSM */
/*****************************************************************************/
typedef struct _RXFSMENTRY /* one entry in Rx FSM */
{
int NewState;
void (*pRxActionRoutine) (PDX);
}
RXFSMENTRY;
RXFSMENTRY RxFSM [RXFSMINPUTCOUNT ] [RXFSMSTATECOUNT] =
{
/* Input = RxFSMInputStart Start the receiver */
{
{ RxFSMStateReady ,RxFSMActionStart },/* RX State = Idle */
{ RxFSMStateReady , FSMNullAction },/* RX State = Ready */
{ RxFSMStateRdyHld, FSMNullAction },/* RX State = Idle (held) */
{ RxFSMStateRdyHld, FSMNullAction } /* RX State = Ready(held) */
},
/* Input = RxFSMInputStop Stop the receiver */
{
{ RxFSMStateIdle , FSMNullAction },/* RX State = Idle */
{ RxFSMStateIdle ,RxFSMActionStop },/* RX State = Ready */
{ RxFSMStateIdlHld, FSMNullAction },/* RX State = Idle (held) */
{ RxFSMStateIdlHld, FSMNullAction } /* RX State = Ready(held) */
},
/* Input = RxFSMInputHold Stop the receiver during Tx DMA */
{
{ RxFSMStateIdlHld, FSMNullAction },/* RX State = Idle */
{ RxFSMStateRdyHld,RxFSMActionStop },/* RX State = Ready */
{ RxFSMStateIdlHld, FSMNullAction },/* RX State = Idle (held) */
{ RxFSMStateRdyHld, FSMNullAction } /* RX State = Ready(held) */
},
/* Input = RxFSMInputRelease Restart the receiver after Tx DMA*/
{
{ RxFSMStateIdle ,RxFSMActionInvalid},/* RX State = Idle */
{ RxFSMStateReady ,RxFSMActionInvalid},/* RX State = Ready */
{ RxFSMStateIdle , FSMNullAction },/* RX State = Idle (held) */
{ RxFSMStateReady ,RxFSMActionRestart} /* RX State = Ready(held) */
},
/* Input = RxFSMInputGoodReceive Receiver interrupt - good result */
{
{ RxFSMStateIdle ,RxFSMActionInvalid},/* RX State = Idle */
{ RxFSMStateReady ,RxFSMActionRcvOK },/* RX State = Ready */
{ RxFSMStateIdlHld,RxFSMActionInvalid},/* RX State = Idle (held) */
{ RxFSMStateRdyHld,RxFSMActionInvalid} /* RX State = Ready(held) */
},
/* Input = RxFSMInputReceiverError Receiver interrupt - bad result */
{
{ RxFSMStateIdle ,RxFSMActionInvalid}, /* RX State = Idle */
{ RxFSMStateReady ,RxFSMActionRcvError},/* RX State = Ready */
{ RxFSMStateIdlHld, FSMNullAction }, /* RX State = Idle (held) */
{ RxFSMStateRdyHld, FSMNullAction } /* RX State = Ready(held) */
}
};
/*****************************************************************************/
/* This is the declaration of the Transmitter FSM */
/*****************************************************************************/
typedef struct _TXFSMENTRY /* one entry in Rx FSM */
{
int NewState;
void (*pTxActionRoutine) (PDX);
}
TXFSMENTRY;
TXFSMENTRY TxFSM [TXFSMINPUTCOUNT ] [TXFSMSTATECOUNT] =
{
/* Input = TxFSMInputStart Start a transmission. */
{
{ TxFSMStateTxing ,TxFSMActionStart }, /* TX State = Idle */
{ TxFSMStateTxing ,TxFSMActionXmitNext}, /* TX State = Active */
{ TxFSMStateTxing , FSMNullAction }, /* TX State = Transmitting */
{ TxFSMStateAborting, FSMNullAction }, /* TX_State = Wait for abort compl */
{ TxFSMStateAborting, FSMNullAction } /* TX_State = Closing Down */
},
/* Input = TxFSMInputEOTX Good Transmission completion */
{
{ TxFSMStateIdle ,TxFSMActionInvalid }, /* TX State = Idle */
{ TxFSMStateActive ,TxFSMActionInvalid }, /* TX State = Active */
{ TxFSMStateActive ,TxFSMActionEndOK }, /* TX State = Transmitting */
{ TxFSMStateAborting, FSMNullAction }, /* TX_State = Wait for abort compl */
{ TxFSMStateClosing , FSMNullAction } /* TX_State = Closing Down */
},
/* Input = TxFSMInputStop Stop the transmitter. */
{
{ TxFSMStateIdle , FSMNullAction }, /* TX State = Idle */
{ TxFSMStateIdle ,TxFSMActionStop }, /* TX State = Active */
{ TxFSMStateClosing ,TxFSMActionAbort }, /* TX State = Transmitting */
{ TxFSMStateClosing , FSMNullAction }, /* TX_State = Wait for abort compl */
{ TxFSMStateClosing , FSMNullAction } /* TX_State = Closing Down */
},
/* Input = TxFSMInputAbortd Abort Complete interrupt received. */
{
{ TxFSMStateIdle ,TxFSMActionInvalid }, /* TX State = Idle */
{ TxFSMStateActive ,TxFSMActionInvalid }, /* TX State = Active */
{ TxFSMStateTxing ,TxFSMActionInvalid }, /* TX State = Transmitting */
{ TxFSMStateTxing ,TxFSMActionXmitNext}, /* TX_State = Wait for abort compl */
{ TxFSMStateIdle ,TxFSMActionStop } /* TX_State = Closing Down */
},
/* Input = TxFSMInputEOTx_Err Error Completion interrupt received */
{
{ TxFSMStateIdle ,TxFSMActionInvalid }, /* TX State = Idle */
{ TxFSMStateActive ,TxFSMActionInvalid }, /* TX State = Active */
{ TxFSMStateActive ,TxFSMActionEndError}, /* TX State = Transmitting */
{ TxFSMStateAborting, FSMNullAction }, /* TX_State = Wait for abort compl */
{ TxFSMStateClosing , FSMNullAction } /* TX_State = Closing Down */
}
};
/*****************************************************************************/
/* Configuration data */
/*****************************************************************************/
CONFIGDATA ConfigData[] =
{ /* must be in ADAPTER_TYPE order */
/* DL$01 */
{ AT_SDLC, "SDLC1",(IO_ADDRESS)0x380, 0, 1, 0, 0,
1 /*AddrSpace*/,
0 /*BusNumber*/,
3,3,FALSE,Latched,
0, 0,FALSE,Latched /* IRQ4 cut ! */
},
/* DL$02 */
{ AT_SDLC, "SDLC1",(IO_ADDRESS)0x380, 0, 1, 0, 0,
1 /*AddrSpace*/,
0 /*BusNumber*/,
3,3,FALSE,Latched,
4,4,FALSE,Latched
},
/* DL$03 */
{ AT_MPCA1,"MPCA1",(IO_ADDRESS)0x380, 0, 1, (IO_ADDRESS)
0x3AF, 0x0A,
1 /*AddrSpace*/,
0 /*BusNumber*/,
4,4,FALSE,Latched, /* 0x0A => IRQ4, DMA chan 1 */
0, 0,FALSE,Latched
},
/* DL$04 */
{ AT_MPCA2,"MPCA2",(IO_ADDRESS)0x3a0, 0, 0, (IO_ADDRESS)
0x38F, 0x09,
1 /*AddrSpace*/,
0 /*BusNumber*/,
3,3,FALSE,Latched, /* 0x09 => IRQ3, no DMA */
0, 0,FALSE,Latched
},
/* DL$05 */
{ AT_MPAA1,"MPAA1",(IO_ADDRESS)0x380, POS_IDMPAA1, 1, 0, 0,
1 /*AddrSpace*/,
0 /*BusNumber*/,
3,3,TRUE,LevelSensitive,
0, 0,TRUE,LevelSensitive
},
/* DL$06 */
{ AT_MPAA2,"MPAA2",(IO_ADDRESS)0x3A0, POS_IDMPAA2, 7, 0, 0,
1 /*AddrSpace*/,
0 /*BusNumber*/,
4,4,TRUE,LevelSensitive,
0, 0,TRUE,LevelSensitive
},
};
/*****************************************************************************/
/* Dummy Interface Record for use until the real one comes along, or once */
/* the real one goes away - so we can do initialisation and wrap up without */
/* worrying about generating events for anon-existent IR. */
/*****************************************************************************/
IR InitIR = {0};